import { Controller, Get, Param, Query } from '@nestjs/common';
import { TagService } from './tag.service';
import { Tag } from '../../entities/tag.entity';
import { Public } from '../../common/decorators/public.decorator';
import { ApiTags, ApiOperation, ApiResponse, ApiParam, ApiQuery } from '@nestjs/swagger';

@ApiTags('标签管理')
@Controller('api/tags')
export class TagController {
  constructor(private readonly tagService: TagService) {}

  // 获取所有标签（公开接口）
  @Public()
  @Get()
  @ApiOperation({
    summary: '获取所有标签',
    description: '获取系统中所有的标签',
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: [Tag],
  })
  findAll() {
    return this.tagService.findAll();
  }

  // 获取热门标签（公开接口）
  @Public()
  @Get('popular')
  @ApiOperation({
    summary: '获取热门标签',
    description: '获取系统中使用频率最高的标签',
  })
  @ApiQuery({
    name: 'limit',
    description: '返回数量限制',
    required: false,
    default: 10,
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: [Tag],
  })
  getPopularTags(@Query('limit') limit: number = 10) {
    return this.tagService.getPopularTags(limit);
  }

  // 获取单个标签详情（公开接口）
  @Public()
  @Get(':id')
  @ApiOperation({
    summary: '获取单个标签',
    description: '根据标签ID获取标签详细信息',
  })
  @ApiParam({
    name: 'id',
    description: '标签ID',
    example: '1',
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: Tag,
  })
  @ApiResponse({
    status: 404,
    description: '标签不存在',
  })
  findOne(@Param('id') id: number) {
    return this.tagService.findOne(id);
  }

  // 根据名称查找标签（公开接口）
  @Public()
  @Get('name/:name')
  @ApiOperation({
    summary: '根据名称查找标签',
    description: '根据标签名称查找标签信息',
  })
  @ApiParam({
    name: 'name',
    description: '标签名称',
    example: '技术',
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: Tag,
  })
  @ApiResponse({
    status: 404,
    description: '标签不存在',
  })
  findByName(@Param('name') name: string) {
    return this.tagService.findByName(name);
  }
}
